package CONTABILIDAD_CONTROLADOR;

import ADMINISTRACION_MODELO.ADM_PROVEEDOR;
import ADMINISTRACION_MODELO.ADM_SUCURSAL_PROVEEDOR;
import COBRANZA_MODELO.COB_FACTURA;
import CONTABILIDAD_MODELO.*;
import Conexion.Conexion;
import Modelo.SIS_VERSION;
import RRHH_Modelo.RHH_PAGOS_QUINCENA_CABECERA;
import RRHH_Modelo.RHH_PAGO_SUBSIDIOS;
import RRHH_Modelo.RHH_PLANILLA_AGUINALDO_CABECE;
import RRHH_Modelo.RHH_PLANILLA_EMPLEADOS_CABECE;
import RRHH_Modelo.RHH_PLANILLA_FINIQUITO_CABECE;
import RRHH_Modelo.RHH_PLANILLA_PREV_INDEM_CABE;
import RRHH_Modelo.RHH_PLANILLA_PRIMA_CABECE;
import RRHH_Modelo.RHH_PLANILLA_PRIMA_CABE_PENDI;
import RRHH_Modelo.RHH_PLANILLA_PROV_AGUINAL_CABE;
import RRHH_Modelo.RHH_PLANILLA_PROV_PRIMA_CABE;
import RRHH_Modelo.RHH_PLANILLA_RETROACTIVO_CABE;
import RRHH_Modelo.RHH_PLAN_CELULAR_COMPROBANTE;
import RRHH_Modelo.RHH_QUINQUENIO_CABECERA;
import RRHH_Modelo.RHH_USUARIO;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author equipo_2
 */
@WebServlet(name = "CON_COMPROBANTE_CONTROLLER", urlPatterns = {"/CON_COMPROBANTE_CONTROLLER"})
public class CON_COMPROBANTE_CONTROLLER extends HttpServlet {
    
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        try (PrintWriter out = response.getWriter()) {
            /* TODO output your page here. You may use following sample code. */            
        }
    }
    
    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            String proceso=request.getParameter("proceso");
            
            RHH_USUARIO usuario = ((RHH_USUARIO)request.getSession().getAttribute("usr"));
            Conexion con = new Conexion(usuario.getUSUARIO(), usuario.getPASSWORD());
            
            String html="";
            switch(proceso){
                case "eliminar":
                    anular(request,response, con);
                    break;
                case "copiar":
                    GenerarCentroCosto(request, con);           
                    break;
            }
        } catch (SQLException ex) {
            Logger.getLogger(CON_COMPROBANTE_CONTROLLER.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            String proceso=request.getParameter("proceso");
            RHH_USUARIO usuario = ((RHH_USUARIO)request.getSession().getAttribute("usr"));     
            Conexion con = new Conexion(usuario.getUSUARIO(), usuario.getPASSWORD());
                   
            String html="";
            switch(proceso){
                case "Cambio":
                    html=cambio(request, con);
                    break;
                case "idcomprobante":
                    html=idcomprobante(request, con);
                    break;
                 case "version":
                    html=version(request, con);
                    break; 
                case "cargarCuenta":
                    html=cargarCuenta(request, con);
                    break;
                case "monedaBase":
                    html=monedaBase(request, con);
                    break;
                case "actualizarComprobante":
                    html=actualizarComprobante(request, con);
                    break;
                case "creditoFisctal":
                    html=creditoFisctal(request, con);
                    break;
                case "existeprovedor":
                    html=existeprovedor(request, con);
                    break;
                case "insertarComprobante":
                    html=insertarComprobante(request, con);
                    break;
                case "escribirTotal":
                    html=escribirTotal(request, con);
                    break;
                case "obtenerComprobante":
                    html=obtenerComprobante(request, con);
                    break;
                case "TieneCentroCosto":
                    html=tieneCentroCosto(request, con);
                    break;
                case "RetencionesCuenta":
                    html=RetencionesCuenta(request, con);
                    break;
                case "CompraVentaCuenta":
                    html=CompraVentaCuenta(request, con);
                    break;
                case "GenerarCentroCosto":
                    html=GenerarCentroCosto(request, con);
                    break;
                case "crearProovedor":
                    html=crearProovedor(request, con);
                    break;
                case "nuevaSucursal":
                    nuevaSucursal(request, con);
                    break;
                case "deducibleFiscal":
                    html=deducibleFiscal(request, con);
                    break;
                
                    
            }
            
            response.setCharacterEncoding("UTF-8");
            response.setContentType("text/plain");
            response.getWriter().write(html);
            con.Close();
        } catch (SQLException ex) {
            Logger.getLogger(CON_COMPROBANTE_CONTROLLER.class.getName()).log(Level.SEVERE, null, ex);
        }
        
    }
    
    public String RetencionesCuenta(HttpServletRequest request, Conexion con ){
         String codigoCuenta=request.getParameter("codigo");
         CON_CUENTA_CONTABLE cuenta=new CON_CUENTA_CONTABLE(con);
         cuenta.setCon(con);
         cuenta=cuenta.BuscarXCodigo(codigoCuenta);
         CON_CUENTA_RETENCION retencion=new CON_CUENTA_RETENCION();
         retencion.setCon(con);
         List<CON_CUENTA_RETENCION> listRetencion=retencion.BuscarXidCuenta(cuenta.getID());
         String json="";
         for (int i = 0; i < listRetencion.size(); i++) {
            cuenta=cuenta.BuscarXid(listRetencion.get(i).getID_RETENCION());
            if(cuenta.getTIPO_CUENTA()==0)continue;
            json+="{\"codigo\":\""+cuenta.getCODIGO()+"\", \"descripcion\":\""
                    +cuenta.getDESCRIPCION()+"\",\"retencion\":\""+cuenta.getMONTO_RETENCION()
                    +"\" ,\"moneda\":\""+cuenta.getID_MONEDA()+"\", \"tipo\":\"3\"  },";
           
        }
         if(json.length()>0)
            return json.substring(0,json.length()-1);
         else
            return ""; 
    }
    public String deducibleFiscal(HttpServletRequest request, Conexion con ) throws SQLException{
         String codigoCuenta=request.getParameter("codigo");
         CON_CUENTA_CONTABLE cuenta=new CON_CUENTA_CONTABLE(con);
         cuenta.setCon(con);
         cuenta=cuenta.BuscarXCodigo(codigoCuenta);
         CON_CUENTA_COMPRA_VENTA retencion=new CON_CUENTA_COMPRA_VENTA();
         retencion.setCon(con);
         retencion=retencion.BuscarXidCuenta(cuenta.getID());
         if(retencion==null)return "7";
         return retencion.getDEDUCIBLE_FISCAL()+"";
    }
    
    public String CompraVentaCuenta(HttpServletRequest request, Conexion con ){
         String codigoCuenta=request.getParameter("codigo");
         CON_CUENTA_CONTABLE cuenta=new CON_CUENTA_CONTABLE(con);
         cuenta.setCon(con);
         cuenta=cuenta.BuscarXCodigo(codigoCuenta);
         CON_CUENTA_COMPRA_VENTA compraventa=new CON_CUENTA_COMPRA_VENTA();
         compraventa.setCon(con);
         List<CON_CUENTA_COMPRA_VENTA> listRetencion=compraventa.Todos();
         String json="";
         for (int i = 0; i < listRetencion.size(); i++) {
             cuenta=cuenta.BuscarXid(listRetencion.get(i).getID_CUENTA());
             json+="{\"codigo\":\""+cuenta.getCODIGO()+"\", \"descripcion\":\""
                    +listRetencion.get(i).getDESCRIPCION()+"\",\"retencion\":\""+listRetencion.get(i).getPORCENTAJE()
                    +"\" ,\"moneda\":\""+cuenta.getID_MONEDA()+"\", \"tipo\":\""+listRetencion.get(i).getDEBE_HABER()+"\" },";            
        }
         return json.substring(0,json.length()-1);
    }
    public String crearProovedor(HttpServletRequest request, Conexion con ){
         double nit=Double.parseDouble(request.getParameter("nit"));
         String rz=request.getParameter("rz");
         ADM_PROVEEDOR proovedor=new ADM_PROVEEDOR(0.0, rz, nit);
         proovedor.setCon(con);
         proovedor.Insertar();
         proovedor=proovedor.BuscarxNit(nit);
         return proovedor.getID()+"";
    }
    public String existeprovedor(HttpServletRequest request, Conexion con ){
         String nit=request.getParameter("nit");
         ADM_PROVEEDOR proovedor=new ADM_PROVEEDOR();
         proovedor.setCon(con);
         proovedor=proovedor.BuscarxNit(Double.parseDouble(nit));
         String html="";
         if(proovedor != null){
             html="{\"rz\":\""+proovedor.getRAZON_SOCIAL()+"\", \"sucursal\":[";
             ADM_SUCURSAL_PROVEEDOR sucursal=new ADM_SUCURSAL_PROVEEDOR();
             sucursal.setCon(con);
             List<ADM_SUCURSAL_PROVEEDOR> lista=sucursal.TodosxProveedor(proovedor.getID());
             for (int i = 0; i < lista.size(); i++) {
                 html+="{\"id\":\""+lista.get(i).getID()+"\",\"desc\":\""+lista.get(i).getDIRECCION()+"\"},";
             }
             if(lista.size()>0)
             html=html.substring(0,html.length()-1);
             html+="]}";
             return html;
         }
         return html;
    }
    
    public String creditoFisctal(HttpServletRequest request, Conexion con ){
        CON_CUENTA_CONTABLE cuenta=new CON_CUENTA_CONTABLE(con);
        cuenta.setCon(con);
        CON_CUENTA_COMPRA_VENTA compraventa=new CON_CUENTA_COMPRA_VENTA();
        compraventa.setCon(con);
        compraventa=compraventa.CreditoFiscal();
        compraventa.getDEDUCIBLE_FISCAL();
        cuenta=cuenta.BuscarXid(compraventa.getID_CUENTA());
        String json="";
             json+="{\"codigo\":\""+cuenta.getCODIGO()+"\", \"descripcion\":\""
                    +compraventa.getDESCRIPCION()+"\",\"retencion\":\""+compraventa.getPORCENTAJE()
                    +"\" ,\"moneda\":\""+cuenta.getID_MONEDA()+"\", \"tipo\":\""+compraventa.getDEBE_HABER()+"\" }";            
         return json;
    }
    
    public String escribirTotal(HttpServletRequest request, Conexion con ){
         Numero_a_Letra nal = new Numero_a_Letra();
         String n=request.getParameter("valor");
         String html=nal.Convertir(n, true);
         return html;
    }
    
    public String monedaBase(HttpServletRequest request, Conexion con ){
        CON_MONEDA moneda=new CON_MONEDA();
        moneda.setCon(con);
        String html="";
        try {
            moneda=moneda.getMonedaBase(0);
            html=moneda.getACRONIMO()+"";
        } catch (SQLException ex) {
        }
        return html;
    }
    
    public String obtenerComprobante(HttpServletRequest request, Conexion con ) throws SQLException{
        double id = Double.parseDouble(request.getParameter("id"));
        CON_COMPROBANTE comprobante = new CON_COMPROBANTE();
        comprobante.setCon(con);
        RHH_USUARIO usuario = ((RHH_USUARIO)request.getSession().getAttribute("usr"));
        String inicial=usuario.inicialusuario(usuario.getID());
        comprobante=comprobante.BuscarXid(id);
        CON_CUENTA_COMPROBANTE cuentaComp=new CON_CUENTA_COMPROBANTE();
        cuentaComp.setCon(con);
        List<CON_CUENTA_COMPROBANTE> lista = cuentaComp.Buscar(id);
        String detalle="[";
        CON_CUENTA_CONTABLE cuenta=new CON_CUENTA_CONTABLE(con);
        cuenta.setCon(con);
        CON_CENTRO_COSTO centro=new CON_CENTRO_COSTO(con);
        centro.setCon(con);
        COB_FACTURA factura=new COB_FACTURA();
        factura.setCon(con);
        CON_CHEQUE cheque=new CON_CHEQUE();
        cheque.setCon(con);
        CON_RETENCION_COMPROBANTE reten=new CON_RETENCION_COMPROBANTE();
        reten.setCon(con);
        List<CON_RETENCION_COMPROBANTE> listaReten=reten.buscarXidComprobante(comprobante.getID());
        for (int i = 0; i < lista.size(); i++) {
            if(i>0 && i<lista.size())detalle+=",";
            CON_CUENTA_COMPROBANTE aux=lista.get(i);
            String facturas="0";
            if(aux.getID_FACTURA() != 0.0){
                factura=factura.BuscarXid(aux.getID_FACTURA());
                try{
                    ADM_PROVEEDOR proovedor=new ADM_PROVEEDOR();
                    proovedor.setCon(con);
                    proovedor=proovedor.BuscarxNit(Double.parseDouble(factura.getNIT()));
                     facturas="{\"autorizacion\":\""+factura.getNRO_AUTORIZACION()+"\",\"caracteristica\":\""+factura.getCARACTERISTICA()
                            +"\",\"codigocontrol\":\""+factura.getCODIGO_CONTROL()+"\",\"excento\":\""+factura.getEXCENTO()+"\",\"fecha\":\""+factura.getFECHA_FACTURA()
                            +"\",\"ice\":\""+factura.getICE()+"\",\"monto\":\""+factura.getMONTO_NUMERAL()+"\",\"nit\":\""+factura.getNIT()+"\",\"nro\":\""+(int)factura.getNUMERO_FACTURA()
                            +"\",\"rz\":\""+proovedor.getRAZON_SOCIAL()+"\",\"id\":\""+factura.getID()+"\",\"anulado_Factura\":\""+(int)factura.getESTADO_ANULADO()+"\",\"sucursal\":\""+factura.getID_SUCURSAL_PROVEEDOR()+"\",\"tipo\":\""+factura.getTIPO_FACTURA()+"\",\"i\":\"0\",\"y\":\"0\"}";
                }catch(Exception e){
                }
            }
            String cheques="0";
            if(aux.getCHEQUE()!= 0.0){
                cheque=cheque.BuscarXid(aux.getCHEQUE());
                try{
                     cheques="{\"numero_Cheque\":\""+(int)cheque.getNRO_CHEQUE()+"\",\"monto_Cheque\":\""+cheque.getMONTO()
                            +"\",\"nombre_Cheque\":\""+cheque.getNOMBRE()+"\",\"anulado_Cheque\":\""+cheque.getESTADO().intValue()+"\",\"id\":\""+cheque.getID()+"\",\"fecha_Cheque\":\""+cheque.getFECHA()+"\",\"monto_literal_Cheque\":\""+cheque.getMONTO_LITERAL()+"\"}";
                }catch(Exception e){
                }
            }
          
            
            String cod="";
            cuenta=cuenta.BuscarXid(aux.getID_CUENTA());
            if(aux.getID_CENTRO_COSTO() == 0){
                cod=cuenta.getCODIGO();
            }
            else{
                centro=centro.BuscarXid(aux.getID_CENTRO_COSTO());
                cod=centro.getCODIGO();
            }
            CON_CUENTA_RETENCION retencion=new CON_CUENTA_RETENCION();
            retencion.setCon(con);
            List<CON_CUENTA_RETENCION> listRetencion=retencion.BuscarXidCuenta(cuenta.getID());
            int r=listRetencion.size()>0?1:0;
            DecimalFormatSymbols algo=new DecimalFormatSymbols(Locale.GERMAN);
            algo.setDecimalSeparator('.');
            DecimalFormat df;

            if(comprobante.getCODIGO_RECURRENTE()!=0){
                df= new DecimalFormat("0.000000000",algo);
            }else{
                df= new DecimalFormat("0.00",algo);
            }
            
            detalle+="{\"moneda\":\""+cuenta.getID_MONEDA()+"\",\"retencion\":\""+r+"\",\"cuenta\":\""
                    +cuenta.getCODIGO()+"\",\"cuentaD\":\""+cuenta.getDESCRIPCION()+"\",\"codigo\":\""+cod+"\",\"desc\":\""+aux.getDESCRIPCION()+"\", \"proyecto\":\""+(int)aux.getID_PROYECTO()
                    +"\", \"id\":\""+(int)aux.getID()+"\", \"glosa\":\""+aux.getGLOSA()+"\", \"debe\":\""+df.format(aux.getDEBE())+"\",\"debe_tc\":\""+df.format(aux.getDEBE_TC())+"\", \"haber\":\""
                    +df.format(aux.getHABER())+"\", \"haber_tc\":\""+df.format(aux.getHABER_TC())+"\",\"cc\":\""+aux.getID_CENTRO_COSTO()
                    +"\",\"cheque\":"+cheques+", \"factura\":"+facturas+", \"idcuenta\":\""+lista.get(i).getID_CUENTA()+"\"}";
        }
        detalle+="]";
        
        CON_TIPO_DE_CAMBIO tc = new CON_TIPO_DE_CAMBIO();
        tc.setCon(con);
        List<CON_TIPO_DE_CAMBIO> listatc = tc.BuscarXid(comprobante.getID());
        String tipoCambio="[";
        for (int i = 0; i < listatc.size(); i++) {
            if(i>0 && i<listatc.size())tipoCambio+=",";
            tipoCambio+="{\"id\":\""+listatc.get(i).getID_MONEDA()+"\", \"valor\":\""+listatc.get(i).getTIPO_CAMBIO()+"\"}";
        }
        String retenciones="[";
        CON_CUENTA_COMPROBANTE cc=new CON_CUENTA_COMPROBANTE();
        cc.setCon(con);
        for (int j = 0; j < listaReten.size(); j++) {
            cc=cc.BuscarxID(listaReten.get(j).getID_RETENCION());
            cuenta=cuenta.BuscarXid(cc.getID_CUENTA());
            double r=cuenta.getMONTO_RETENCION();
            CON_CUENTA_COMPRA_VENTA cv=new CON_CUENTA_COMPRA_VENTA();
            cv.setCon(con);
            cv=cv.BuscarXidCuenta(cuenta.getID());
            String tip="3";
            if(cv != null){
                r=cv.getPORCENTAJE();
                tip=cv.getDEDUCIBLE_FISCAL().intValue()==1?"3":cv.getDEDUCIBLE_FISCAL().intValue()+"";
                tip=tip.equals("2")?"1":tip;
            }
            String gross=listaReten.get(j).getGROSSING_UP()==0.0?"Q":"A";
            retenciones+="{\"cuenta\":\""+(int)listaReten.get(j).getID_CUENTA_RETENIDA()+"\", \"tipo\":\""+tip+"\", \"retencion\":\""+(int)listaReten.get(j).getID_RETENCION()+"\", \"gross\":\""+gross+"\", \"monto\":\""+r+"\"},";
        }
        retenciones=retenciones.substring(0,retenciones.length()-1);
        retenciones+="]";
        if(retenciones.equals("]"))
        {
            retenciones="\"\"";
        }
        tipoCambio+="]";
        String html="{\"id\":\""+comprobante.getID()+"\", \"regional\":\""+comprobante.getID_REGIONAL()
                +"\", \"tipo\":\""+comprobante.getTIPO()+"\", \"glosa\":\""+comprobante.getGLOSA()
                +"\", \"descripcion\":\""+comprobante.getDESCRIPCION()+"\", \"codigo\":\""+comprobante.getCODIGO()
                +"\", \"listaRetencion\":"+retenciones+", \"fecha\":\""+comprobante.getFECHA()+"\", \"cargoC\":\""+comprobante.getCARGO_DE_CUENTA().intValue()
                +"\", \"montoLiteral\":\""+comprobante.getMONTO_LITERAL()+"\", \"estadorecurrente\":\""+comprobante.getESTADO_RECURRENTE()
                +"\", \"inicial\":\""+inicial+"\", \"codigorecurrente\":\""+comprobante.getCODIGO_RECURRENTE()+"\", \"detalle\":"+detalle+", \"moneda\":"+tipoCambio+"}";
        return html;
    }
    
    public String GenerarCentroCosto(HttpServletRequest request, Conexion con ) throws SQLException{
        return buquedacodigoCentroCosto(request,con);
    }
    
    public void anular(HttpServletRequest request, HttpServletResponse response, Conexion con) throws IOException, SQLException
    {
        double id = Double.parseDouble(request.getParameter("id"));
        CON_COMPROBANTE comprobante = new CON_COMPROBANTE();
        comprobante.setCon(con);
        comprobante.setID(id);
        comprobante = comprobante.BuscarXid(id);       
        comprobante.AnularXid();
        response.sendRedirect("CONTABILIDAD/CON_BUSCAR_COMPROBANTES.jsp");
    }
    
    public void copiar(HttpServletRequest request, HttpServletResponse response) throws IOException
    {
        response.sendRedirect("CONTABILIDAD/CON_BUSCAR_COMPROBANTES.jsp");
    }
    private void buscarPadre(double padre,double [][]historial,double id,Conexion con,double idComprobante) throws SQLException{
        for (int i = 0; i < historial.length; i++) {
            if(padre !=0 && historial[i][0]==padre){
                CON_RETENCION_COMPROBANTE c=new CON_RETENCION_COMPROBANTE(id,historial[i][1],idComprobante,historial[i][2]);
                c.setCon(con);
                c.Insertar();
            }
        }
    }
    
    public String cuentas(HttpServletRequest request, Conexion con ) throws SQLException{
        int vCuenta=Integer.parseInt(request.getParameter("cuenta"));
        CON_CUENTA_CONTABLE cuenta=new CON_CUENTA_CONTABLE(con);
        if(vCuenta ==-1){
           String json=cuenta.generarListaHojasdescripcion();
           return json;
        }
        SIS_VERSION version=new SIS_VERSION(con);
        List<SIS_VERSION> VersionCuenta=version.getUltimaVersion("cuentaHoja");
        
        String cuentaStr="{";
        for (int i = vCuenta; i < VersionCuenta.size(); i++) {
            double ida=VersionCuenta.get(i).getID_CUENTA();
            cuenta=cuenta.BuscarXid(ida);
            if(cuenta==null && !VersionCuenta.get(i).getACCION().equals("E"))continue;
            int idcu=VersionCuenta.get(i).getID_CUENTA().intValue();
            if(VersionCuenta.get(i).getACCION().equals("E") || cuenta==null){
                cuentaStr+="\"c"+idcu+"\":{\"CODIGO\":\"na\", \"NIVEL\":\"na\", \"id\":\""+idcu+"\", \"DESCRIPCION\":\"na\", \"MONEDA\":\"na\"},";
                cuenta=new CON_CUENTA_CONTABLE(con);
                continue;
            }
            cuentaStr+="\"c"+cuenta.getID()+"\":{\"CODIGO\":\""+cuenta.getCODIGO()+"\", \"NIVEL\":\""+cuenta.getID_NIVEL()+"\", \"id\":\""+cuenta.getID()+"\", \"DESCRIPCION\":\""+cuenta.getDESCRIPCION()+"\", \"MONEDA\":\""+cuenta.getID_MONEDA()+"\"},";
        }
        if(cuentaStr.length()==1) return "[]";
        cuentaStr=cuentaStr.substring(0,cuentaStr.length()-1)+"}";
        
        return cuentaStr;
    }
    public String cargarCuenta(HttpServletRequest request, Conexion con ){
        try {
            String cuenta=cuentas(request, con);
            return "{\"cuenta\":"+cuenta+"}";
        } catch (SQLException ex) {
            return "[]";
        }
    }
    public String version(HttpServletRequest request, Conexion con ){
        try {
            SIS_VERSION version=new SIS_VERSION(con);
            String cuenta=version.getVersion("cuenta");
            return "{\"cuenta\":\""+cuenta+"\"}";
        } catch (SQLException ex) {
            return "{\"cuenta\":0,\"centro\":0}";
        }
    }
    private Double recurrencia;
    public String insertarComprobante(HttpServletRequest request, Conexion con ){        
        try {
            CON_FECHA_CIERRE fechac = new CON_FECHA_CIERRE();
            fechac.setCon(con);                                        

            int mes=fechac.mesActual();
            int ano=fechac.anoActual();
            
            con.Conectar();
            con.Transacction();
            COB_FACTURA factura=new COB_FACTURA();
            CON_CHEQUE cheque = null;
            recurrencia = Double.parseDouble(request.getParameter("recurrencia"));
            String vtotal=request.getParameter("total");
            String cargoCuenta=request.getParameter("cargocuenta");
            double ccargoCuenta=0;
            int lengfact = Integer.parseInt(request.getParameter("factlen"));
            int lengCheque = Integer.parseInt(request.getParameter("chequeLeng"));

            DateFormat format3 = new SimpleDateFormat("dd/MM/yyyy");
            DateFormat format4 = new SimpleDateFormat("dd/MMMM/yyyy");

            if(cargoCuenta.equals("1")){
               ccargoCuenta=0;
            }else{
                ccargoCuenta=1;
            }
            double total = Double.parseDouble(vtotal);
            double regional = Double.parseDouble(request.getParameter("regional"));
            double referencia = Double.parseDouble(request.getParameter("referencia"));
            String tipo = request.getParameter("tipo");
            String montoliteral=request.getParameter("montoliteral");
            String concepto=request.getParameter("concepto");
            String descripcion=request.getParameter("descripcion");
            String fechaCompr=request.getParameter("fechaComp").replace(' ', '/');
            Date dt= new Date();
            dt = format4.parse(fechaCompr);
            
            CON_COMPROBANTE comprobante = new CON_COMPROBANTE(total, montoliteral,1,dt,  "", descripcion, concepto, tipo, 0,0,recurrencia, regional);
            comprobante.setCon(con);
            int codigocomp = comprobante.GenerarCodigoComprobante(Double.parseDouble(tipo),mes,ano);
            comprobante.setCODIGO(codigocomp+"-"+mes+"-"+ano);
            comprobante.setCARGO_DE_CUENTA(ccargoCuenta);
            comprobante.setID_CARGO_DE_CUENTA(referencia);
            boolean insertar =  comprobante.Insertar();
            
            comprobante = comprobante.Buscar(comprobante.getCODIGO(), Double.parseDouble(tipo));
            
            if(recurrencia>0 && recurrencia< 5)
            {                
                CON_RECURRENTES_MENSUALES recurrente_mensual = new CON_RECURRENTES_MENSUALES(recurrencia, ano, comprobante.getID(), mes);
                recurrente_mensual.setCon(con);
                recurrente_mensual.Insertar();
                CON_COMPROBANTE comprobanterec = new CON_COMPROBANTE();
                comprobanterec.setCon(con);
                comprobanterec = comprobanterec.BuscarXRECURRENTE(recurrencia);
                new RHH_PLAN_CELULAR_COMPROBANTE(con).vaciar();
                CON_CUENTA_COMPROBANTE cuc = new CON_CUENTA_COMPROBANTE();
                cuc.setCon(con);
                cuc.EliminarXComprobante(comprobanterec.getID());
            }
            if(recurrencia ==5)
            {
                CON_RECURRENTE_ANUAL anual = new CON_RECURRENTE_ANUAL(comprobante.getID(), (double)ano, (double)5);
                anual.setCon(con);
                anual.Insertar();
                CON_COMPROBANTE comprobanterec = new CON_COMPROBANTE();
                comprobanterec.setCon(con);
                comprobanterec = comprobanterec.BuscarXRECURRENTE(recurrencia);
                CON_CUENTA_COMPROBANTE cuc = new CON_CUENTA_COMPROBANTE();
                cuc.setCon(con);
                cuc.EliminarXComprobante(comprobanterec.getID());
            }            
            if(recurrencia ==8)
            {           
                CON_RECURRENTES_MENSUALES recurrente_mensual = new CON_RECURRENTES_MENSUALES(recurrencia, ano, comprobante.getID(), mes);
                recurrente_mensual.setCon(con);
                recurrente_mensual.Insertar();
                CON_COMPROBANTE comprobanterec = new CON_COMPROBANTE();
                comprobanterec.setCon(con);
                comprobanterec = comprobanterec.BuscarXRECURRENTE(recurrencia);
                CON_CUENTA_COMPROBANTE cuc = new CON_CUENTA_COMPROBANTE();
                cuc.setCon(con);
                cuc.EliminarXComprobante(comprobanterec.getID());
                List<RHH_PAGO_SUBSIDIOS> pagos = new RHH_PAGO_SUBSIDIOS(con).TodosSinPagoContabilidad();
                for(RHH_PAGO_SUBSIDIOS pago:pagos)
                {
                    pago.setESTADO(4);
                    pago.Modificar();
                }
            }            
            if(recurrencia ==9)
            {                
                CON_RECURRENTES_MENSUALES recurrente_mensual = new CON_RECURRENTES_MENSUALES(recurrencia, ano, comprobante.getID(), mes);
                recurrente_mensual.setCon(con);
                recurrente_mensual.Insertar();
                CON_COMPROBANTE comprobanterec = new CON_COMPROBANTE();
                comprobanterec.setCon(con);
                comprobanterec = comprobanterec.BuscarXRECURRENTE(recurrencia);
                CON_CUENTA_COMPROBANTE cuc = new CON_CUENTA_COMPROBANTE();
                cuc.setCon(con);
                cuc.EliminarXComprobante(comprobanterec.getID());
                RHH_PAGOS_QUINCENA_CABECERA pago = new RHH_PAGOS_QUINCENA_CABECERA(con).Buscar(ano, mes);
                pago.setESTADO(2);
                pago.Modificar();
                
            } 
            if(recurrencia ==10)
            {                
                CON_RECURRENTES_MENSUALES recurrente_mensual = new CON_RECURRENTES_MENSUALES(recurrencia, ano, comprobante.getID(), mes);
                recurrente_mensual.setCon(con);
                recurrente_mensual.Insertar();
                CON_COMPROBANTE comprobanterec = new CON_COMPROBANTE();
                comprobanterec.setCon(con);
                comprobanterec = comprobanterec.BuscarXRECURRENTE(recurrencia);
                CON_CUENTA_COMPROBANTE cuc = new CON_CUENTA_COMPROBANTE();
                cuc.setCon(con);
                cuc.EliminarXComprobante(comprobanterec.getID());
                RHH_PLANILLA_EMPLEADOS_CABECE pago = new RHH_PLANILLA_EMPLEADOS_CABECE(con).Buscar(ano, mes);
                pago.setESTADO(2);
                pago.Modificar();
                
            }             
            if(recurrencia ==14)
            {                
                CON_RECURRENTES_MENSUALES recurrente_mensual = new CON_RECURRENTES_MENSUALES(recurrencia, ano, comprobante.getID(), mes);
                recurrente_mensual.setCon(con);
                recurrente_mensual.Insertar();
                CON_COMPROBANTE comprobanterec = new CON_COMPROBANTE();
                comprobanterec.setCon(con);
                comprobanterec = comprobanterec.BuscarXRECURRENTE(recurrencia);
                CON_CUENTA_COMPROBANTE cuc = new CON_CUENTA_COMPROBANTE();
                cuc.setCon(con);
                cuc.EliminarXComprobante(comprobanterec.getID());
                RHH_QUINQUENIO_CABECERA prov =new RHH_QUINQUENIO_CABECERA(con).Buscar(ano, mes);
                prov.setESTADO(0);
                prov.Modificar();
            }      
            if(recurrencia ==15)
            {                
                CON_RECURRENTES_MENSUALES recurrente_mensual = new CON_RECURRENTES_MENSUALES(recurrencia, ano, comprobante.getID(), mes);
                recurrente_mensual.setCon(con);
                recurrente_mensual.Insertar();
                CON_COMPROBANTE comprobanterec = new CON_COMPROBANTE();
                comprobanterec.setCon(con);
                comprobanterec = comprobanterec.BuscarXRECURRENTE(recurrencia);
                CON_CUENTA_COMPROBANTE cuc = new CON_CUENTA_COMPROBANTE();
                cuc.setCon(con);
                cuc.EliminarXComprobante(comprobanterec.getID());
                RHH_PLANILLA_FINIQUITO_CABECE cabe = new RHH_PLANILLA_FINIQUITO_CABECE(con).Buscar(mes, ano);
                cabe.setESTADO(0);
                cabe.Modificar();
            }      
            if(recurrencia ==16)
            {                
                CON_RECURRENTES_MENSUALES recurrente_mensual = new CON_RECURRENTES_MENSUALES(recurrencia, ano, comprobante.getID(), mes);
                recurrente_mensual.setCon(con);
                recurrente_mensual.Insertar();
                CON_COMPROBANTE comprobanterec = new CON_COMPROBANTE();
                comprobanterec.setCon(con);
                comprobanterec = comprobanterec.BuscarXRECURRENTE(recurrencia);
                CON_CUENTA_COMPROBANTE cuc = new CON_CUENTA_COMPROBANTE();
                cuc.setCon(con);
                cuc.EliminarXComprobante(comprobanterec.getID());
                RHH_PLANILLA_PROV_AGUINAL_CABE prov =new RHH_PLANILLA_PROV_AGUINAL_CABE(con).Buscar(ano, mes);
                prov.setESTADO(2);
                prov.Modificar();
            } 
            if(recurrencia ==17)
            {                
                CON_RECURRENTES_MENSUALES recurrente_mensual = new CON_RECURRENTES_MENSUALES(recurrencia, ano, comprobante.getID(), mes);
                recurrente_mensual.setCon(con);
                recurrente_mensual.Insertar();
                CON_COMPROBANTE comprobanterec = new CON_COMPROBANTE();
                comprobanterec.setCon(con);
                comprobanterec = comprobanterec.BuscarXRECURRENTE(recurrencia);
                CON_CUENTA_COMPROBANTE cuc = new CON_CUENTA_COMPROBANTE();
                cuc.setCon(con);
                cuc.EliminarXComprobante(comprobanterec.getID());
                RHH_PLANILLA_PROV_PRIMA_CABE prov =new RHH_PLANILLA_PROV_PRIMA_CABE(con).Buscar(ano, mes);
                prov.setESTADO(2);
                prov.Modificar();
            } 
            if(recurrencia ==18)
            {                
                CON_RECURRENTES_MENSUALES recurrente_mensual = new CON_RECURRENTES_MENSUALES(recurrencia, ano, comprobante.getID(), mes);
                recurrente_mensual.setCon(con);
                recurrente_mensual.Insertar();
                CON_COMPROBANTE comprobanterec = new CON_COMPROBANTE();
                comprobanterec.setCon(con);
                comprobanterec = comprobanterec.BuscarXRECURRENTE(recurrencia);
                CON_CUENTA_COMPROBANTE cuc = new CON_CUENTA_COMPROBANTE();
                cuc.setCon(con);
                cuc.EliminarXComprobante(comprobanterec.getID());
                RHH_PLANILLA_PREV_INDEM_CABE prov =new RHH_PLANILLA_PREV_INDEM_CABE(con).Buscar(ano, mes);
                prov.setESTADO(2);
                prov.Modificar();
            } 
            if(recurrencia ==19)
            {                
                CON_RECURRENTES_MENSUALES recurrente_mensual = new CON_RECURRENTES_MENSUALES(recurrencia, ano, comprobante.getID(), mes);
                recurrente_mensual.setCon(con);
                recurrente_mensual.Insertar();
                CON_COMPROBANTE comprobanterec = new CON_COMPROBANTE();
                comprobanterec.setCon(con);
                comprobanterec = comprobanterec.BuscarXRECURRENTE(recurrencia);
                CON_CUENTA_COMPROBANTE cuc = new CON_CUENTA_COMPROBANTE();
                cuc.setCon(con);
                cuc.EliminarXComprobante(comprobanterec.getID());
                RHH_PLANILLA_RETROACTIVO_CABE prov =new RHH_PLANILLA_RETROACTIVO_CABE(con).Buscar(ano, mes);
                prov.setESTADO(2);
                prov.Modificar();
            } 
            if(recurrencia ==20)
            {                
                CON_COMPROBANTE comprobanterec = new CON_COMPROBANTE();
                comprobanterec.setCon(con);
                comprobanterec = comprobanterec.BuscarXRECURRENTE(recurrencia);
                CON_CUENTA_COMPROBANTE cuc = new CON_CUENTA_COMPROBANTE();
                cuc.setCon(con);
                String glosa="";
                if(cuc.Buscar(comprobanterec.getID()).size()>0)
                    glosa= cuc.Buscar(comprobanterec.getID()).get(0).getGLOSA();
                
                cuc.EliminarXComprobante(comprobanterec.getID());
                StringTokenizer token = new StringTokenizer(glosa, " ");
                int ano_ = 0;
                int numero_ = 0;
                if(!glosa.equals(""))
                {
                    token.nextToken();
                    token.nextToken();
                    ano_=Integer.parseInt(token.nextToken());
                    numero_=Integer.parseInt(token.nextToken());
                }
                
                RHH_PLANILLA_AGUINALDO_CABECE prov =new RHH_PLANILLA_AGUINALDO_CABECE(con).Buscar_ano_numero(ano_,numero_);
                prov.setESTADO(2);
                prov.Modificar();
                CON_AGUINALDO_CABECE_COMPRO acc = new CON_AGUINALDO_CABECE_COMPRO((int)comprobante.getID(), prov.getID());
                acc.setCon(con);
                acc.Insertar();
            } 
            if(recurrencia ==21)
            {                
                CON_RECURRENTES_MENSUALES recurrente_mensual = new CON_RECURRENTES_MENSUALES(recurrencia, ano, comprobante.getID(), mes);
                recurrente_mensual.setCon(con);
                recurrente_mensual.Insertar();
                CON_COMPROBANTE comprobanterec = new CON_COMPROBANTE();
                comprobanterec.setCon(con);
                comprobanterec = comprobanterec.BuscarXRECURRENTE(recurrencia);
                CON_CUENTA_COMPROBANTE cuc = new CON_CUENTA_COMPROBANTE();
                cuc.setCon(con);
                cuc.EliminarXComprobante(comprobanterec.getID());
                RHH_PLANILLA_EMPLEADOS_CABECE pago = new RHH_PLANILLA_EMPLEADOS_CABECE(con).Buscar(ano, mes);
                pago.setESTADO_IMPO(2);
                pago.Modificar();
                
            } 
            if(recurrencia ==22)
            {                
                CON_COMPROBANTE comprobanterec = new CON_COMPROBANTE();
                comprobanterec.setCon(con);
                comprobanterec = comprobanterec.BuscarXRECURRENTE(recurrencia);
                CON_CUENTA_COMPROBANTE cuc = new CON_CUENTA_COMPROBANTE();
                cuc.setCon(con);
                String glosa="";
                if(cuc.Buscar(comprobanterec.getID()).size()>0)
                    glosa= cuc.Buscar(comprobanterec.getID()).get(0).getGLOSA();
                
                cuc.EliminarXComprobante(comprobanterec.getID());
                StringTokenizer token = new StringTokenizer(glosa, " ");
                int ano_ = 0;
                int numero_ = 0;
                if(!glosa.equals(""))
                {
                    token.nextToken();
                    token.nextToken();
                    ano_=Integer.parseInt(token.nextToken());
                    numero_=Integer.parseInt(token.nextToken());
                }
                
                RHH_PLANILLA_PRIMA_CABECE prov =new RHH_PLANILLA_PRIMA_CABECE(con).Buscar_ano_numero(ano_,numero_);
                prov.setESTADO(2);
                prov.Modificar();
                CON_PRIMA_CABECE_COMPROBANTE acc = new CON_PRIMA_CABECE_COMPROBANTE((int)comprobante.getID(), prov.getID());
                acc.setCon(con);
                acc.Insertar();
            } 
            if(recurrencia ==23)
            {                
                CON_COMPROBANTE comprobanterec = new CON_COMPROBANTE();
                comprobanterec.setCon(con);
                comprobanterec = comprobanterec.BuscarXRECURRENTE(recurrencia);
                CON_CUENTA_COMPROBANTE cuc = new CON_CUENTA_COMPROBANTE();
                cuc.setCon(con);
                String glosa="";
                if(cuc.Buscar(comprobanterec.getID()).size()>0)
                    glosa= cuc.Buscar(comprobanterec.getID()).get(0).getGLOSA();
                
                cuc.EliminarXComprobante(comprobanterec.getID());
                StringTokenizer token = new StringTokenizer(glosa, " ");
                int ano_ = 0;
                int numero_ = 0;
                if(!glosa.equals(""))
                {
                    token.nextToken();
                    token.nextToken();
                    token.nextToken();
                    ano_=Integer.parseInt(token.nextToken());
                    numero_=Integer.parseInt(token.nextToken());
                }
                
                RHH_PLANILLA_PRIMA_CABE_PENDI prov =new RHH_PLANILLA_PRIMA_CABE_PENDI(con).Buscar_ano_numero(ano_,numero_);
                prov.setESTADO(2);
                prov.Modificar();
                CON_PRIMA_PEN_CABECE_COMPRO acc = new CON_PRIMA_PEN_CABECE_COMPRO((int)comprobante.getID(), prov.getID());
                acc.setCon(con);
                acc.Insertar();
            } 
            
            String lcam = request.getParameter("lengcambio");
            int lengcambio = Integer.parseInt(lcam);
            
            for(int i = 0; i<lengcambio; i++)
            {
                String id = request.getParameter("listaTipoCambio[" + i + "][CODIGO]");
                String cambio = request.getParameter("listaTipoCambio[" + i + "][TPCAMBIO]");
                double idm = Double.parseDouble(id);
                double icambio = Double.parseDouble(cambio);
                
                CON_TIPO_DE_CAMBIO ctc = new CON_TIPO_DE_CAMBIO(idm, comprobante.getID(), icambio, 0);
                ctc.setCon(con);
                ctc.Insertar();
            }
                        
            CON_CUENTA_CONTABLE cuentas = new CON_CUENTA_CONTABLE(con);
            cuentas.setCon(con);
            CON_CENTRO_COSTO centros = new CON_CENTRO_COSTO(con);
            centros.setCon(con);            
            String cantidadCuentas = request.getParameter("cantidadCuenta");
            String cantidadCentros = request.getParameter("cantidadCC");
            int lengcuentas = Integer.parseInt(cantidadCuentas);
            int lengcentros = Integer.parseInt(cantidadCentros);
            double [][]historial=new double[lengcuentas+lengcentros][3];
            for (int i = 0; i < lengcentros; i++) {
                double gross=Double.parseDouble(request.getParameter("listaCC[" + i + "][gross]"));
                String codigocentro = request.getParameter("listaCC[" + i + "][codigo]");
                String codigocuenta = request.getParameter("listaCC[" + i + "][Codigo_Cuenta]");
                factura=new COB_FACTURA();
                if(codigocentro.equals("") && codigocuenta.equals(""))continue;
                String icuenta=request.getParameter("listaCC[" + i + "][i]");
                String ycuenta=request.getParameter("listaCC[" + i + "][j]");
                for (int j = 0; j < lengfact; j++) {
                    String y=request.getParameter("factura[" + j + "][i]");
                    String x=request.getParameter("factura[" + j + "][y]");
                    if(y.equals(icuenta) && x.equals(ycuenta)){
                       String nit=request.getParameter("factura[" + j + "][nit]");
                       ADM_PROVEEDOR proovedor=new ADM_PROVEEDOR();
                       proovedor.setCon(con);
                       proovedor=proovedor.BuscarxNit(Double.parseDouble(nit));
                       String fecha=request.getParameter("factura[" + j + "][fecha]");
                       String nro=request.getParameter("factura[" + j + "][nro]");
                       String caracteristica=request.getParameter("factura[" + j + "][caracteristica]");
                       String autorizacion=request.getParameter("factura[" + j + "][autorizacion]");
                       String tipo3=request.getParameter("factura[" + j + "][tipo]");
                       String sucursal=request.getParameter("factura[" + j + "][sucursal]");
                       String codigocontrol=request.getParameter("factura[" + j + "][codigocontrol]");
                       double monto=Double.parseDouble(request.getParameter("factura[" + j + "][monto]"));
                       double ice=Double.parseDouble(request.getParameter("factura[" + j + "][ice]"));
                       double excento=Double.parseDouble(request.getParameter("factura[" + j + "][excento]"));
                       Date fech=format3.parse(fecha);
                       factura=new COB_FACTURA(autorizacion,codigocontrol,null,monto,nit,fech,Double.parseDouble(nro),tipo3,1,0.0,0,caracteristica,Double.parseDouble(sucursal));
                       factura.setCon(con);
                       factura.setICE(ice);
                       factura.setID_SUCURSAL_PROVEEDOR(Double.parseDouble(sucursal));
                       factura.setCARACTERISTICA(caracteristica);
                       factura.setTIPO_FACTURA(tipo3);
                       factura.setEXCENTO(excento);
                       String anulado=request.getParameter("factura[" + j + "][anulado_Factura]");
                       factura.setESTADO_ANULADO(Double.parseDouble(anulado));
                       int idfact=factura.Insertar();
                       factura.setID(idfact);
                    }
                }
                for (int j = 0; j < lengCheque; j++) 
                {
                    String y=request.getParameter("listaCheque[" + j + "][i]");
                    String x=request.getParameter("listaCheque[" + j + "][y]");
                    if(y.equals(icuenta) && x.equals(ycuenta))
                    {
                       Double numeroc=Double.parseDouble(request.getParameter("listaCheque[" + j + "][numero_Cheque]"));
                       Double montoc=Double.parseDouble(request.getParameter("listaCheque[" + j + "][monto_Cheque]"));
                       String nombrec = request.getParameter("listaCheque[" + j + "][nombre_Cheque]");
                       String f=request.getParameter("listaCheque[" + j + "][fecha_Cheque]");
                       String anulado=request.getParameter("listaCheque[" + j + "][anulado_Cheque]");
                       Date fechach = format3.parse(f);
                       String monto_literal_Cheque = request.getParameter("listaCheque[" + j + "][monto_literal_Cheque]");
                       cheque = new CON_CHEQUE(0.0, numeroc , regional, fechach, nombrec, montoc, montoliteral);                       
                       cheque.setESTADO(Double.parseDouble(anulado));
                       cheque.setCon(con);
                        cheque.Insertar();
                        cheque=cheque.Buscar();
                    }
                }
                centros = centros.BuscarXCodigo(codigocentro);
                cuentas = cuentas.BuscarXCodigo(codigocuenta);
                String desc = request.getParameter("listaCC[" + i + "][desc]");
                CON_CUENTA_COMPROBANTE detalle = new CON_CUENTA_COMPROBANTE();
                detalle.setCon(con);
                detalle.setDESCRIPCION(desc);
                detalle.setID_CUENTA(cuentas.getID());
                detalle.setID_CENTRO_COSTO(centros.getID());
                detalle.setID_COMPROBANTE(comprobante.getID());
                String habers = request.getParameter("listaCC[" + i + "][haber]");
                String haberstc = request.getParameter("listaCC[" + i + "][haberCambio]");
                Double haber =0.0;
                Double haber_tc =0.0;
                double i3 = Double.parseDouble(request.getParameter("listaCC[" + i + "][i]"));
                historial[i][0]=i3+1;
                historial[i][2]=gross;
                if(!habers.equals(""))
                {
                    haber = Double.parseDouble(habers);
                    haber_tc = Double.parseDouble(haberstc);
                }
                String debes = request.getParameter("listaCC[" + i + "][debe]");
                String debestc = request.getParameter("listaCC[" + i + "][debeCambio]");
                Double debe =0.0;
                Double debe_tc =0.0;
                
                if(!debes.equals(""))
                {
                    debe = Double.parseDouble(debes);
                    debe_tc = Double.parseDouble(debestc);
                }
                Double proyectoCC=Double.parseDouble(request.getParameter("listaCC[" + i + "][proyectoCC]"));
                String glosa = request.getParameter("listaCC["+i+"][glosa]");                
                if(cheque!=null)
                {
                    detalle.setCHEQUE(cheque.getID());
                    cheque = null;
                }
                else
                {
                    detalle.setCHEQUE(0.0);
                }
                if(factura!=null)
                {
                    detalle.setID_FACTURA(factura.getID());
                    cheque = null;
                }
                else
                {
                    detalle.setID_FACTURA(0.0);
                }
                 
                detalle.setID_PROYECTO(proyectoCC);
                detalle.setDEBE(debe);
                detalle.setHABER(haber);
                detalle.setHABER_TC(haber_tc);
                detalle.setDEBE_TC(debe_tc);
                detalle.setGLOSA(glosa);
                double id=detalle.Insertar();
                historial[i][1]=id;
            }
            for (int i = 0; i < lengcuentas; i++) {
                double gross=Double.parseDouble(request.getParameter("listaCuenta[" + i + "][gross]"));

                String codigo = request.getParameter("listaCuenta[" + i + "][codigo]");
                factura=new COB_FACTURA();
                String desc = request.getParameter("listaCuenta[" + i + "][desc]");
                if(codigo.equals(""))continue;
                cuentas = cuentas.BuscarXCodigo(codigo);
                String ycuenta=request.getParameter("listaCuenta[" + i + "][i]");
                for (int j = 0; j < lengfact; j++) {
                    String y=request.getParameter("factura[" + j + "][i]");
                    String x=request.getParameter("factura[" + j + "][y]");
                    if(y.equals(ycuenta) && x.equals("-1")){
                       String nit=request.getParameter("factura[" + j + "][nit]");
                       ADM_PROVEEDOR proovedor=new ADM_PROVEEDOR();
                       proovedor.setCon(con);
                       proovedor=proovedor.BuscarxNit(Double.parseDouble(nit));
                       String fecha=request.getParameter("factura[" + j + "][fecha]");
                       String id=request.getParameter("factura[" + j + "][id]");
                       String nro=request.getParameter("factura[" + j + "][nro]");
                       String caracteristica=request.getParameter("factura[" + j + "][caracteristica]");
                       String autorizacion=request.getParameter("factura[" + j + "][autorizacion]");
                       String tipo3=request.getParameter("factura[" + j + "][tipo]");
                       String sucursal=request.getParameter("factura[" + j + "][sucursal]");
                       String codigocontrol=request.getParameter("factura[" + j + "][codigocontrol]");
                       double monto=Double.parseDouble(request.getParameter("factura[" + j + "][monto]"));
                       double ice=Double.parseDouble(request.getParameter("factura[" + j + "][ice]"));
                       double excento=Double.parseDouble(request.getParameter("factura[" + j + "][excento]"));
                       Date fech=format3.parse(fecha);
                       factura=new COB_FACTURA(autorizacion,codigocontrol,null,monto,nit,fech,Double.parseDouble(nro),tipo3,1,0.0,0,caracteristica,Double.parseDouble(sucursal));
                       factura.setICE(ice);
                       factura.setID_SUCURSAL_PROVEEDOR(Double.parseDouble(sucursal));
                       factura.setCARACTERISTICA(caracteristica);
                       factura.setTIPO_FACTURA(tipo3);
                       factura.setID(Double.parseDouble(id));
                       factura.setEXCENTO(excento);
                       factura.setCon(con);
                       String anulado=request.getParameter("factura[" + j + "][anulado_Factura]");
                       factura.setESTADO_ANULADO(Double.parseDouble(anulado));
                       int idfact=factura.Insertar();
                       factura.setID(idfact);
                    }
                }                
                for (int j = 0; j < lengCheque; j++) 
                {
                    String y=request.getParameter("listaCheque[" + j + "][i]");
                    String x=request.getParameter("listaCheque[" + j + "][y]");
                    if(y.equals(ycuenta) && x.equals("-1"))
                    {
                       Double numeroc=Double.parseDouble(request.getParameter("listaCheque[" + j + "][numero_Cheque]"));
                       Double montoc=Double.parseDouble(request.getParameter("listaCheque[" + j + "][monto_Cheque]"));
                       String nombrec = request.getParameter("listaCheque[" + j + "][nombre_Cheque]");
                       String f=request.getParameter("listaCheque[" + j + "][fecha_Cheque]");
                       Date fechach = format3.parse(f);
                       String monto_literal_Cheque = request.getParameter("listaCheque[" + j + "][monto_literal_Cheque]");
                       cheque = new CON_CHEQUE(0.0, numeroc , regional, fechach, nombrec, montoc, montoliteral);                       
                        String anulado=request.getParameter("listaCheque[" + j + "][anulado_Cheque]");
                        cheque.setESTADO(Double.parseDouble(anulado));
                       cheque.setCon(con);
                        cheque.Insertar();
                        cheque=cheque.Buscar();
                    }
                }
                CON_CUENTA_COMPROBANTE detalle = new CON_CUENTA_COMPROBANTE();
                detalle.setDESCRIPCION(desc);
                detalle.setCon(con);
                detalle.setID_CUENTA(cuentas.getID());
                detalle.setID_CENTRO_COSTO(0);
                detalle.setID_COMPROBANTE(comprobante.getID());
                String habers = request.getParameter("listaCuenta[" + i + "][haber]");
                String idpadres=request.getParameter("listaCuenta[" + i + "][idPadre]");
                double idpadre=0.0;
                if(idpadres!=null)
                    idpadre = Double.parseDouble(idpadres);
                else
                    idpadre=0.0;
                double i3 = Double.parseDouble(request.getParameter("listaCuenta[" + i + "][i]"));
                historial[i+lengcentros][0]=i3+1;
                historial[i][2]=gross;
                String haberstc = request.getParameter("listaCuenta[" + i + "][haberCambio]");
                Double haber =0.0;
                Double haber_tc =0.0;
                if(!habers.equals(""))
                {
                    haber = Double.parseDouble(habers);
                    haber_tc = Double.parseDouble(haberstc);
                }
                String debes = request.getParameter("listaCuenta[" + i + "][debe]");
                String debestc = request.getParameter("listaCuenta[" + i + "][debeCambio]");
                Double debe =0.0;
                Double debe_tc =0.0;

                if(!debes.equals(""))
                {
                    debe = Double.parseDouble(debes);
                    debe_tc = Double.parseDouble(debestc);
                }
                Double proyecto=Double.parseDouble(request.getParameter("listaCuenta[" + i + "][proyecto]"));
                String glosa = request.getParameter("listaCuenta["+i+"][glosa]");                
                
                if(cheque!=null)
                {
                    detalle.setCHEQUE(cheque.getID());
                    cheque = null;
                }
                else
                {
                    detalle.setCHEQUE(0.0);
                }
                if(factura!=null)
                {
                    detalle.setID_FACTURA(factura.getID());
                    factura = null;
                }
                else
                {
                    detalle.setID_FACTURA(0.0);
                }
                
                detalle.setID_PROYECTO(proyecto);
                detalle.setDEBE(debe);
                detalle.setHABER(haber);
                detalle.setHABER_TC(haber_tc);
                detalle.setDEBE_TC(debe_tc);
                detalle.setGLOSA(glosa);
                int id =detalle.Insertar();
                historial[i+lengcentros][1]=id;
                buscarPadre(idpadre+1,historial,id,con,comprobante.getID());
            }
            
            con.commit();
            return "True";
        } catch (Exception e) {
            con.rollback();
            if(recurrencia>0 && recurrencia<21){
                return "Este comprobante ya fue generado anteriormente";
            }else{
                return "Error de proceso";
            }
        }        
    }
    
    public String actualizarComprobante(HttpServletRequest request, Conexion con ){
        try 
        {            
           
            CON_FECHA_CIERRE fechac = new CON_FECHA_CIERRE();
            fechac.setCon(con);                                        

            
            con.Conectar();
            con.Transacction();
            COB_FACTURA factura=new COB_FACTURA();
            CON_CHEQUE cheque = null;
            Double recurrencia = Double.parseDouble(request.getParameter("recurrencia"));
            String vtotal=request.getParameter("total");
            String cargoCuenta=request.getParameter("cargocuenta");
            double ccargoCuenta=0;
            int lengfact = Integer.parseInt(request.getParameter("factlen"));
            int lengCheque = Integer.parseInt(request.getParameter("chequeLeng"));

            DateFormat format3 = new SimpleDateFormat("dd/MM/YYYY");
            DateFormat format4 = new SimpleDateFormat("dd/MMMM/yyyy");

            if(cargoCuenta.equals("1")){
               ccargoCuenta=0;
            }else{
                ccargoCuenta=1;
            }
            
            double total = Double.parseDouble(vtotal);
            double regional = Double.parseDouble(request.getParameter("regional"));
            double moneda = Double.parseDouble(request.getParameter("moneda"));
            String tipo = request.getParameter("tipo");
            String codigo_comp = request.getParameter("codigo_comp");
            String montoliteral=request.getParameter("montoliteral");
            String concepto=request.getParameter("concepto");
            String descripcion=request.getParameter("descripcion");
            String fechaCompr=request.getParameter("fechaComp").replace(' ', '/');
            Date dt= new Date();
            dt = format4.parse(fechaCompr);
                                    
            CON_COMPROBANTE comprobante = new CON_COMPROBANTE();
            comprobante.setCon(con);
            comprobante = comprobante.BuscarXCodigo(codigo_comp,Double.parseDouble(tipo));            
            comprobante.setCARGO_DE_CUENTA(ccargoCuenta);
            comprobante.setDESCRIPCION(descripcion);
            comprobante.setFECHA(dt);
            comprobante.setGLOSA(concepto);
            comprobante.setID_REGIONAL(regional);
            comprobante.setMONTO_LITERAL(montoliteral);
            comprobante.setMONTO_NUMERAL(total);
            comprobante.setTIPO(tipo);
            comprobante.setTIPO_MONEDA(moneda);
           
            comprobante.Update();
            
            CON_RETENCION_COMPROBANTE rr=new CON_RETENCION_COMPROBANTE();
            rr.setCon(con);
            rr.EliminarXidComprobante(comprobante.getID());
            
            CON_CUENTA_COMPROBANTE cc = new CON_CUENTA_COMPROBANTE();
            cc.setCon(con);
            cc.EliminarXComprobante(comprobante.getID());
            
            CON_TIPO_DE_CAMBIO tc = new CON_TIPO_DE_CAMBIO();
            tc.setCon(con);
            tc.EliminarXCOMPROBANTE(comprobante.getID());
            
            String lcam = request.getParameter("lengcambio");
            int lengcambio = Integer.parseInt(lcam);
            
           for(int i = 0; i<lengcambio; i++)
            {
                String id = request.getParameter("listaTipoCambio[" + i + "][CODIGO]");
                String cambio = request.getParameter("listaTipoCambio[" + i + "][TPCAMBIO]");
                double idm = Double.parseDouble(id);
                double icambio = Double.parseDouble(cambio);
                
                CON_TIPO_DE_CAMBIO ctc = new CON_TIPO_DE_CAMBIO(idm, comprobante.getID(), icambio, 0);
                ctc.setCon(con);
                ctc.Insertar();
            }
                        
            CON_CUENTA_CONTABLE cuentas = new CON_CUENTA_CONTABLE(con);
            cuentas.setCon(con);
            CON_CENTRO_COSTO centros = new CON_CENTRO_COSTO(con);
            centros.setCon(con);            
            String cantidadCuentas = request.getParameter("cantidadCuenta");
            String cantidadCentros = request.getParameter("cantidadCC");
            int lengcuentas = Integer.parseInt(cantidadCuentas);
            int lengcentros = Integer.parseInt(cantidadCentros);
            double [][]historial=new double[lengcuentas+lengcentros][3];
            for (int i = 0; i < lengcentros; i++) {
                double gross=Double.parseDouble(request.getParameter("listaCC[" + i + "][gross]"));
                String codigocentro = request.getParameter("listaCC[" + i + "][codigo]");
                String codigocuenta = request.getParameter("listaCC[" + i + "][Codigo_Cuenta]");
                factura=new COB_FACTURA();
                if(codigocentro.equals("") && codigocuenta.equals(""))continue;
                String icuenta=request.getParameter("listaCC[" + i + "][i]");
                String ycuenta=request.getParameter("listaCC[" + i + "][j]");
                for (int j = 0; j < lengfact; j++) {
                    String y=request.getParameter("factura[" + j + "][i]");
                    String x=request.getParameter("factura[" + j + "][y]");
                    if(y.equals(icuenta) && x.equals(ycuenta)){
                       String nit=request.getParameter("factura[" + j + "][nit]");
                       ADM_PROVEEDOR proovedor=new ADM_PROVEEDOR();
                       proovedor.setCon(con);
                       proovedor=proovedor.BuscarxNit(Double.parseDouble(nit));
                       String fecha=request.getParameter("factura[" + j + "][fecha]");
                       String nro=request.getParameter("factura[" + j + "][nro]");
                       String caracteristica=request.getParameter("factura[" + j + "][caracteristica]");
                       String autorizacion=request.getParameter("factura[" + j + "][autorizacion]");
                       String tipo3=request.getParameter("factura[" + j + "][tipo]");
                       String sucursal=request.getParameter("factura[" + j + "][sucursal]");
                       String codigocontrol=request.getParameter("factura[" + j + "][codigocontrol]");
                       double monto=Double.parseDouble(request.getParameter("factura[" + j + "][monto]"));
                       double ice=Double.parseDouble(request.getParameter("factura[" + j + "][ice]"));
                       double excento=Double.parseDouble(request.getParameter("factura[" + j + "][excento]"));
                       Date fech=format3.parse(fecha);
                       factura=new COB_FACTURA(autorizacion,codigocontrol,null,monto,nit,fech,Double.parseDouble(nro),tipo3,1,0.0,0,caracteristica,Double.parseDouble(sucursal));
                       factura.setCon(con);
                       factura.setICE(ice);
                       factura.setEXCENTO(excento);
                       String anulado=request.getParameter("factura[" + j + "][anulado_Factura]");
                       factura.setESTADO_ANULADO(Double.parseDouble(anulado));
                       factura.Insertar();
                     
                       factura=factura.Buscar();
                    }
                }
                for (int j = 0; j < lengCheque; j++) 
                {
                    String y=request.getParameter("listaCheque[" + j + "][i]");
                    String x=request.getParameter("listaCheque[" + j + "][y]");
                    if(y.equals(icuenta) && x.equals(ycuenta))
                    {
                       Double numeroc=Double.parseDouble(request.getParameter("listaCheque[" + j + "][numero_Cheque]"));
                       Double montoc=Double.parseDouble(request.getParameter("listaCheque[" + j + "][monto_Cheque]"));
                       String nombrec = request.getParameter("listaCheque[" + j + "][nombre_Cheque]");
                       String f=request.getParameter("listaCheque[" + j + "][fecha_Cheque]");
                       String anulado=request.getParameter("listaCheque[" + j + "][anulado_Cheque]");
                       Date fechach = format3.parse(f);
                       String monto_literal_Cheque = request.getParameter("listaCheque[" + j + "][monto_literal_Cheque]");
                       cheque = new CON_CHEQUE(0.0, numeroc , regional, fechach, nombrec, montoc, montoliteral);                       
                       cheque.setESTADO(Double.parseDouble(anulado));
                       cheque.setCon(con);
                        cheque.Insertar();
                        cheque=cheque.Buscar();
                    }
                }
                centros = centros.BuscarXCodigo(codigocentro);
                cuentas = cuentas.BuscarXCodigo(codigocuenta);
                String desc = request.getParameter("listaCC[" + i + "][desc]");
                CON_CUENTA_COMPROBANTE detalle = new CON_CUENTA_COMPROBANTE();
                detalle.setCon(con);
                detalle.setDESCRIPCION(desc);
                detalle.setID_CUENTA(cuentas.getID());
                detalle.setID_CENTRO_COSTO(centros.getID());
                detalle.setID_COMPROBANTE(comprobante.getID());
                String habers = request.getParameter("listaCC[" + i + "][haber]");
                String haberstc = request.getParameter("listaCC[" + i + "][haberCambio]");
                Double haber =0.0;
                Double haber_tc =0.0;
                double i3 = Double.parseDouble(request.getParameter("listaCC[" + i + "][i]"));
                historial[i][0]=i3+1;
                historial[i][2]=gross;
                if(!habers.equals(""))
                {
                    haber = Double.parseDouble(habers);
                    haber_tc = Double.parseDouble(haberstc);
                }
                String debes = request.getParameter("listaCC[" + i + "][debe]");
                String debestc = request.getParameter("listaCC[" + i + "][debeCambio]");
                Double debe =0.0;
                Double debe_tc =0.0;
                
                if(!debes.equals(""))
                {
                    debe = Double.parseDouble(debes);
                    debe_tc = Double.parseDouble(debestc);
                }
                Double proyectoCC=Double.parseDouble(request.getParameter("listaCC[" + i + "][proyectoCC]"));
                String glosa = request.getParameter("listaCC["+i+"][glosa]");                
                if(cheque!=null)
                {
                    detalle.setCHEQUE(cheque.getID());
                    cheque = null;
                }
                else
                {
                    detalle.setCHEQUE(0.0);
                }
                if(factura!=null)
                {
                    detalle.setID_FACTURA(factura.getID());
                    cheque = null;
                }
                else
                {
                    detalle.setID_FACTURA(0.0);
                }
                 
                detalle.setID_PROYECTO(proyectoCC);
                detalle.setDEBE(debe);
                detalle.setHABER(haber);
                detalle.setHABER_TC(haber_tc);
                detalle.setDEBE_TC(debe_tc);
                detalle.setGLOSA(glosa);
                double id=detalle.Insertar();
                historial[i][1]=id;
            }
            for (int i = 0; i < lengcuentas; i++) {
                double gross=Double.parseDouble(request.getParameter("listaCuenta[" + i + "][gross]"));

                String codigo = request.getParameter("listaCuenta[" + i + "][codigo]");
                factura=new COB_FACTURA();
                String desc = request.getParameter("listaCuenta[" + i + "][desc]");
                if(codigo.equals(""))continue;
                cuentas = cuentas.BuscarXCodigo(codigo);
                String ycuenta=request.getParameter("listaCuenta[" + i + "][i]");
                for (int j = 0; j < lengfact; j++) {
                    String y=request.getParameter("factura[" + j + "][i]");
                    String x=request.getParameter("factura[" + j + "][y]");
                    if(y.equals(ycuenta) && x.equals("-1")){
                       String nit=request.getParameter("factura[" + j + "][nit]");
                       ADM_PROVEEDOR proovedor=new ADM_PROVEEDOR();
                       proovedor.setCon(con);
                       proovedor=proovedor.BuscarxNit(Double.parseDouble(nit));
                       String fecha=request.getParameter("factura[" + j + "][fecha]");
                       String id=request.getParameter("factura[" + j + "][id]");
                       String nro=request.getParameter("factura[" + j + "][nro]");
                       String caracteristica=request.getParameter("factura[" + j + "][caracteristica]");
                       String autorizacion=request.getParameter("factura[" + j + "][autorizacion]");
                       String tipo3=request.getParameter("factura[" + j + "][tipo]");
                       String sucursal=request.getParameter("factura[" + j + "][sucursal]");
                       String codigocontrol=request.getParameter("factura[" + j + "][codigocontrol]");
                       double monto=Double.parseDouble(request.getParameter("factura[" + j + "][monto]"));
                       double ice=Double.parseDouble(request.getParameter("factura[" + j + "][ice]"));
                       double excento=Double.parseDouble(request.getParameter("factura[" + j + "][excento]"));
                       Date fech=format3.parse(fecha);
                       factura=new COB_FACTURA(autorizacion,codigocontrol,null,monto,nit,fech,Double.parseDouble(nro),tipo3,1,0.0,0,caracteristica,Double.parseDouble(sucursal));
                       factura.setICE(ice);
                       factura.setID(Double.parseDouble(id));
                       factura.setEXCENTO(excento);
                       factura.setCon(con);
                       String anulado=request.getParameter("factura[" + j + "][anulado_Factura]");
                       factura.setESTADO_ANULADO(Double.parseDouble(anulado));
                       factura.Insertar();
                       factura=factura.Buscar();
                    }
                }                
                for (int j = 0; j < lengCheque; j++) 
                {
                    String y=request.getParameter("listaCheque[" + j + "][i]");
                    String x=request.getParameter("listaCheque[" + j + "][y]");
                    if(y.equals(ycuenta) && x.equals("-1"))
                    {
                       Double numeroc=Double.parseDouble(request.getParameter("listaCheque[" + j + "][numero_Cheque]"));
                       Double montoc=Double.parseDouble(request.getParameter("listaCheque[" + j + "][monto_Cheque]"));
                       String nombrec = request.getParameter("listaCheque[" + j + "][nombre_Cheque]");
                       String f=request.getParameter("listaCheque[" + j + "][fecha_Cheque]");
                       Date fechach = format3.parse(f);
                       String monto_literal_Cheque = request.getParameter("listaCheque[" + j + "][monto_literal_Cheque]");
                       cheque = new CON_CHEQUE(0.0, numeroc , regional, fechach, nombrec, montoc, montoliteral);                       
                        String anulado=request.getParameter("listaCheque[" + j + "][anulado_Cheque]");
                        cheque.setESTADO(Double.parseDouble(anulado));
                       cheque.setCon(con);
                        cheque.Insertar();
                        cheque=cheque.Buscar();
                    }
                }
                CON_CUENTA_COMPROBANTE detalle = new CON_CUENTA_COMPROBANTE();
                detalle.setDESCRIPCION(desc);
                detalle.setCon(con);
                detalle.setID_CUENTA(cuentas.getID());
                detalle.setID_CENTRO_COSTO(0);
                detalle.setID_COMPROBANTE(comprobante.getID());
                String habers = request.getParameter("listaCuenta[" + i + "][haber]");
                String idpadres=request.getParameter("listaCuenta[" + i + "][idPadre]");
                double idpadre=0.0;
                if(idpadres!=null)
                    idpadre = Double.parseDouble(idpadres);
                else
                    idpadre=0.0;
                double i3 = Double.parseDouble(request.getParameter("listaCuenta[" + i + "][i]"));
                historial[i+lengcentros][0]=i3+1;
                historial[i][2]=gross;
                String haberstc = request.getParameter("listaCuenta[" + i + "][haberCambio]");
                Double haber =0.0;
                Double haber_tc =0.0;
                if(!habers.equals(""))
                {
                    haber = Double.parseDouble(habers);
                    haber_tc = Double.parseDouble(haberstc);
                }
                String debes = request.getParameter("listaCuenta[" + i + "][debe]");
                String debestc = request.getParameter("listaCuenta[" + i + "][debeCambio]");
                Double debe =0.0;
                Double debe_tc =0.0;

                if(!debes.equals(""))
                {
                    debe = Double.parseDouble(debes);
                    debe_tc = Double.parseDouble(debestc);
                }
                Double proyecto=Double.parseDouble(request.getParameter("listaCuenta[" + i + "][proyecto]"));
                String glosa = request.getParameter("listaCuenta["+i+"][glosa]");                
                
                if(cheque!=null)
                {
                    detalle.setCHEQUE(cheque.getID());
                    cheque = null;
                }
                else
                {
                    detalle.setCHEQUE(0.0);
                }
                if(factura!=null)
                {
                    detalle.setID_FACTURA(factura.getID());
                    factura = null;
                }
                else
                {
                    detalle.setID_FACTURA(0.0);
                }
                
                detalle.setID_PROYECTO(proyecto);
                detalle.setDEBE(debe);
                detalle.setHABER(haber);
                detalle.setHABER_TC(haber_tc);
                detalle.setDEBE_TC(debe_tc);
                detalle.setGLOSA(glosa);
                int id =detalle.Insertar();
                historial[i+lengcentros][1]=id;
                buscarPadre(idpadre+1,historial,id,con,comprobante.getID());
            }
            
            con.commit();
            return "True";
        } catch (Exception e) {
            con.rollback();
            return "False";
        }
        
    }
    
    public String idcomprobante(HttpServletRequest request, Conexion con ){
        CON_FECHA_CIERRE fecha = new CON_FECHA_CIERRE();
        fecha.setCon(con);

        int mes=fecha.mesActual();
        int ano=fecha.anoActual();
                    
        CON_COMPROBANTE comprobante = new CON_COMPROBANTE();
        comprobante.setCon(con);
        double tipo = Double.parseDouble(request.getParameter("tipo"));
        return comprobante.GenerarCodigoComprobante(tipo,mes,ano)+"";
    }
    
    public String cambio(HttpServletRequest request, Conexion con ) throws SQLException{
        String fecha =request.getParameter("fecha");
        double id =Double.parseDouble(request.getParameter("id"));
        String [] mes=fecha.split("-");
        CON_MONEDA  monedan = new CON_MONEDA();
        monedan.setCon(con);
        String json="";
        if(id ==0){
            CON_FECHA_CIERRE fechaCierre=new CON_FECHA_CIERRE();
            fechaCierre.setCon(con);
            fechaCierre = fechaCierre.Buscar(Integer.parseInt(mes[0]), Integer.parseInt(mes[1]));
            if(fechaCierre ==null){
                json= monedan.TodosJson();
                json=json.substring(0,json.length()-1);
                return json;
            }else{
                CON_TC_CIERRE tc=new CON_TC_CIERRE();
                tc.setCon(con);
                List<CON_TC_CIERRE> lista= tc.buscarXid(fechaCierre.getID());
                json="";
                for (int i = 0; i < lista.size(); i++) {
                    monedan=monedan.BuscarXid(lista.get(i).getID_MONEDA());
                    if(monedan.getMONEDA_BASE()==0)continue;
                    json+="{\"CODIGO\":\""+monedan.getID()+"\", \"ACRONIMO\":\""+monedan.getACRONIMO()+"\", \"TPCAMBIO\":\""+lista.get(i).getMONTO()+"\"},";
                }
            }
        }else{
            CON_TIPO_DE_CAMBIO ccp2 = new CON_TIPO_DE_CAMBIO();
            ccp2.setCon(con);
            List<CON_TIPO_DE_CAMBIO> listac2 = ccp2.BuscarXid(id);
            if(listac2.size()!=0){
                for (int i = 0; i < listac2.size(); i++) {
                    monedan=monedan.BuscarXid(listac2.get(i).getID_MONEDA());
                    json+="{\"CODIGO\":\""+monedan.getID()+"\", \"ACRONIMO\":\""+monedan.getACRONIMO()+"\", \"TPCAMBIO\":\""+listac2.get(i).getTIPO_CAMBIO()+"\"},";
                }
            }else{
                CON_FECHA_CIERRE fechaCierre=new CON_FECHA_CIERRE();
                fechaCierre.setCon(con);
                fechaCierre = fechaCierre.Buscar(Integer.parseInt(mes[0]), Integer.parseInt(mes[1]));
                if(fechaCierre ==null){
                    json= monedan.TodosJson();
                    json=json.substring(0,json.length()-1);
                    return json;
                }else{
                    CON_TC_CIERRE tc=new CON_TC_CIERRE();
                    tc.setCon(con);
                    List<CON_TC_CIERRE> lista= tc.buscarXid(fechaCierre.getID());
                    json="";
                    for (int i = 0; i < lista.size(); i++) {
                        monedan=monedan.BuscarXid(lista.get(i).getID_MONEDA());
                        json+="{\"CODIGO\":\""+monedan.getID()+"\", \"ACRONIMO\":\""+monedan.getACRONIMO()+"\", \"TPCAMBIO\":\""+lista.get(i).getMONTO()+"\"},";
                    }
                }
            }
            
        }
        return json.substring(0,json.length()-1);
        
    }
    
    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
        
    private String buquedacodigoCentroCosto(HttpServletRequest request, Conexion con) throws SQLException {
        CON_CENTRO_COSTO centro_costo = new CON_CENTRO_COSTO(con);
        centro_costo.setCon(con);
        String html=centro_costo.gethojas(request.getParameter("value"));
        return html;
    }
    
    private String tieneCentroCosto(HttpServletRequest request, Conexion con) throws SQLException {
        CON_CENTRO_COSTO centro_costo = new CON_CENTRO_COSTO(con);
        centro_costo.setCon(con);
        String codigo = request.getParameter("value");
        if(centro_costo.tierneCentrocosto(codigo))
            return "true";
        else
            return "false";
    }    

    private void nuevaSucursal(HttpServletRequest request, Conexion con) {
        
        String nit = request.getParameter("nit");
        ADM_PROVEEDOR admp = new ADM_PROVEEDOR();
        admp.setCon(con);
        admp = admp.BuscarxNit(Double.parseDouble(nit));
        
        String direccion = request.getParameter("direccions");
        String telefonos = request.getParameter("telefonos");
        
        ADM_SUCURSAL_PROVEEDOR adms = new ADM_SUCURSAL_PROVEEDOR(0.0, admp.getID(), direccion, Double.parseDouble(telefonos), "", 0.0);
        adms.setCon(con);
        adms.Insertar();
        
        
    }
}
